package com.orientation.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.orientation.dto.AllocateClassParamDto;
import com.orientation.dto.StudentImportDto;
import com.orientation.dto.UserLoginParamDto;
import com.orientation.entity.Student;
import com.orientation.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 学生 服务类
 * </p>
 *
 * @author xuandian
 * @since 2022-3-9
 */
public interface StudentService extends IService<Student> {
    /**
     * 学生登录
     *
     * @param loginParamDto
     * @return
     */
    Student login(UserLoginParamDto loginParamDto);

    /**
     * id查询学生
     *
     * @param id
     * @return
     */

    List<Student> findByCollegeId(String id);

    /**
     * 性别和院系id 查询学生
     *
     * @param id
     * @param gender
     * @return
     */
    long countByCollegeIdAndGender(String id, String gender);

    /**
     * 分配班级
     * 选择 入学年份2018 专业代码044班级序号1 班级排名 12 产生的学号就是180440112
     *
     * @param classParamDto
     */

    void allocateClass(AllocateClassParamDto classParamDto);

    /**
     * 移除班级  只将班级id 和加入班级时间设置为空
     *
     * @param allocateClassParamDto
     */
    void updateClassId(AllocateClassParamDto allocateClassParamDto);

    /**f废弃
     * 待处理专业分班
     *
     * @return
     */
    List<MajorSizeVo> studentMajor();

    /**
     * 按省份统计学生
     *
     * @param collegeId
     * @param majorId
     * @return PieDataVo
     */

    List<PieDataVo> getStudentProvinceGroup(String collegeId, String majorId);

    /**
     * 导入文件批量新增 poi版本poi2.xxx 版本错误
     *
     * @param multipartFile
     */
    void importPileInfo(MultipartFile multipartFile);

    /**
     * 单个学生数据新增 //废弃不用
     *
     * @param studentImportDto
     */
    void insertStudentList(StudentImportDto studentImportDto);

    /**
     * * 按照条件分页查询学生基本信息1
     *
     * @param page
     * @param collegeName
     * @param majorName
     * @param studentName
     * @param grade
     * @return
     */

    IPage<StudentPageVo> findStudentVoPage(Page<StudentPageVo> page, String collegeName, String majorName, String studentName, String grade);

    /**
     * * 按照条件分页查询学生基本信息
     *
     * @param pageNum
     * @param pageSize
     * @param collegeId
     * @param majorId
     * @param studentName
     * @param grade
     * @param domicilePlaceProvince
     * @return
     */
    Page<StudentPageVo> queryStudentPageVo(Integer pageNum, Integer pageSize, String collegeId, String majorId, String studentName, String grade, String domicilePlaceProvince);

//    /**
//     * 导出已经分配班级学生信息
//     * @param collegeId
//     * @param majorId
//     * @param className
//     * @param studentName
//     * @param allocateDate
//     * @param response
//     */
//
//    void statisticsByUnitExport(String collegeId, String majorId, String className, String studentName, String allocateDate, HttpServletResponse response);

    /**
     * 显示已经分配班级学生
     *
     * @param pageNum
     * @param pageSize
     * @param collegeId
     * @param majorId
     * @param className
     * @param studentName
     * @param allocateDate
     * @return
     */

    IPage<StudentClassInfoVo> queryStudentClass(Integer pageNum, Integer pageSize, String collegeId, String majorId, String className, String studentName, String allocateDate, String adviserId);

    /**
     * 条件分配班级学生导出
     *
     * @param collegeId
     * @param majorId
     * @param className
     * @param studentName
     * @param allocateDate
     */
    void statisticsExport(String collegeId, String majorId, String className, String studentName, String allocateDate, HttpServletResponse response);

    /**
     * 单个添加学生基本信息
     *
     * @param student
     */

    void insertStudent(@Param("student") Student student);

    /**
     * 未分配班级学生
     *
     * @param pageNum
     * @param pageSize
     * @param majorId
     * @param studentName
     * @param adviserId
     * @return
     */
    IPage<Student> queryNullClassId(Integer pageNum, Integer pageSize, String majorId, String studentName, String adviserId);

    /**
     * 已经分配班级学生
     *
     * @param pageNum
     * @param pageSize
     * @param majorId
     * @param studentName
     * @param adviserId
     * @return
     */
    IPage<Student> queryNotNullClassId(Integer pageNum, Integer pageSize, String majorId, String studentName, String adviserId);

    /**
     * 导入 （模板错误）
     *
     * @param file
     * @return
     */
    List<Student> importStudentInfos(MultipartFile file);

    /**
     * 导入
     *
     * @param file
     */
    void importStudentPileInfo(MultipartFile file);

    /**
     * id查询修改
     *
     * @param id
     * @return
     */

    StudentPageVo studentClassInfoVo(String id);

    /**
     * 文件导出 列表全导出
     *
     * @param response
     */

    void export(HttpServletResponse response);

    /**
     * 微调班级
     *
     * @param allocateClassParamDto
     */

    void updateStudentClass(AllocateClassParamDto allocateClassParamDto);

    /**
     * 分配宿舍床位使用
     *
     * @param pageNum
     * @param pageSize
     * @param collegeId
     * @param majorId
     * @param className
     * @param studentName
     * @return
     */

    IPage<StudentClassInfoVo> queryStudentIdBed(Integer pageNum, Integer pageSize, String collegeId, String majorId, String className, String studentName, String sexType, String adviserId);

    /**
     * 物资领取学生选择（学生）类别
     *
     * @param pageNum
     * @param pageSize
     * @param collegeId
     * @param majorId
     * @param className
     * @param studentName
     * @return
     */
    IPage<StudentClassInfoVo> queryStudentIdGoods(Integer pageNum, Integer pageSize, String collegeId, String majorId, String className, String studentName);

    /**
     * 列表解析
     *
     * @param collegeId
     * @param majorId
     * @param className
     * @param studentName
     * @param allocateDate
     * @param type
     * @param studentId
     * @return
     */
    List<StudentClassInfoVo> getStudentClassInfoVos(String collegeId, String majorId, String className, String studentName, String allocateDate, String type, String studentId);

    /**
     * h5 修改
     *
     * @param student
     */
    void updateStudent(Student student);

    /**
     * h5修改头像
     *
     * @param files
     * @param sid
     */

    Student updateStudentAvatar(MultipartFile[] files, String sid);

    /**
     * 报道单
     *
     * @param studentId
     * @param idCardNo
     * @return
     */
    ReportSheetVo studentReport(String studentId, String idCardNo);

    /**
     * 未报到学生
     *
     * @param pageNum
     * @param pageSize
     * @param majorId
     * @param className
     * @param studentName
     * @param adviserId
     * @return
     */
    IPage<StudentClassInfoVo> fileCheckIn(Integer pageNum, Integer pageSize, String majorId, String className, String studentName, String adviserId);

    /**
     * 未报到学生 导出
     *
     * @param majorId
     * @param className
     * @param studentName
     * @param adviserId
     * @param response
     */
    void fileCheckInExport(String majorId, String className, String studentName, String adviserId, HttpServletResponse response);

    /**
     * @param id
     * @param studentId
     * @return
     */
    List<StudentClassInfoVo> fileCheckInAll(String id, String studentId, String studentName);

    /**
     * @param pageNum
     * @param pageSize
     * @param id
     * @param studentId
     * @param studentName
     * @return
     */
    IPage<StudentClassInfoVo> queryfileCheckInAll(Integer pageNum, Integer pageSize, String id, String studentId, String studentName);
}